﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.System.AppAuthorityChecker
 * 类型：       验证权限
 * 功能说明：   验证权限
 * 作者：       谈震鸣
 * 创建日期：   2007/08/14
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
 */
using System;
using Shpm.App.Commons.Db.Beans.Inp;
using Shpm.App.Commons.Db.Beans.Master;
using Shpm.System.Auth.Dao;
using System.Collections;
using Shpm.App.Commons.Utils;



namespace Shpm.System
{
    public class AppAuthorityChecker : AuthorityChecker
    {
        //protected static Log log = LogFactory.getLog(AppAuthorityChecker.class);
        
        public  AppAuthorityChecker()
        {
        }
        
        public override bool IsAuthority(SysUserBean context, AuthorityData authData)
        {
            
            // 如果类没有权限认证设置,权限检查通过
            if (authData == null)
            {
                return true;
            }

            // 如果未登陆或SESSION超时,权限检查失败.
            if (context == null)
                return false;
            
            SysPermission permission = new SysPermission();
            try
            {
                // 如果权限已存在于权限列表中(或系统用户成员), 权限检查通过..
                BeanUtils.CopyProperties(permission, authData);
                if (context.CheckPermission(permission)) return true;
                
                // 查询数据库并将权限添加到权限列表

                InpUserPermissionBean paramBean = new InpUserPermissionBean();
                BeanUtils.CopyProperties(paramBean, authData);

                paramBean.SysUserId = context.getMstSysUserBean().SysUserId;

                LogonDao dao = new LogonDao();
                IList permissions = dao.FindByPermission(paramBean);

                IEnumerator enm = permissions.GetEnumerator();
                while (enm.MoveNext())
                {
                    InpUserPermissionBean dataBean = enm.Current as InpUserPermissionBean;
                    BeanUtils.CopyProperties(permission, dataBean);
                    context.addPermission(permission);
                    
                }

                BeanUtils.CopyProperties(permission, authData);
            }
            catch (Exception)
            {
                //log.fatal(e);
                permission = null;
                return false;
            }

            // 如果权限已存在于权限列表中, 权限检查通过.
            return context.CheckPermission(permission);
        }
      }
}
